home *** CD-ROM | disk | FTP | other *** search
/ Revista do CD-ROM 114 / CDRom114.iso / internet / extens / dband / Bandwidth Tester.xpi / chrome / bandwidthtest.jar / content / tester.js < prev    next >
Encoding:
Text File  |  2004-09-09  |  7.1 KB  |  249 lines

  1.  
  2. var aLevels     = new Array();
  3.     aLevels[0]    = "http://jgillick.nettripper.com/bandwidthtest/test/level_1.txt";
  4.     aLevels[1]    = "http://jgillick.nettripper.com/bandwidthtest/test/level_2.txt";
  5.     aLevels[2]    = "http://jgillick.nettripper.com/bandwidthtest/test/level_3.txt";
  6.     aLevels[3]    = "http://jgillick.nettripper.com/bandwidthtest/test/level_4.txt";
  7.     aLevels[4]    = "http://jgillick.nettripper.com/bandwidthtest/test/level_5.txt";
  8.  
  9. var iSum        = 0;
  10. var iCount        = 0;
  11. var iLevelCount    = 0;
  12. var iAll        = 0;
  13. var iStop        = 5;
  14.  
  15. var oLogs        = null;
  16. var oLogItems    = null;
  17. var oTotal        = null;
  18. var oButton        = null;
  19. var oProgress    = null;
  20. var oConnection    = null;
  21.  
  22. var sStartTime    = 0;
  23.  
  24. function bandwidthtest_init(){
  25.     oLogs         = document.getElementById("log-tree");
  26.     oLogItems    = document.getElementById("log-items");
  27.     oTotal         = document.getElementById("results-field");
  28.     oButton        = document.getElementById("test-button");
  29.     oProgress     = document.getElementById("test-progress");
  30.     oConnection    = document.getElementById("connection-list");
  31.     
  32.     setTimeout("bandwidthtest_autoUpdate()", 500);
  33. }
  34.  
  35. function bandwidthtest_reset(){
  36.     iSum            = 0;
  37.     iCount            = 0;
  38.     iLevelCount        = 0;
  39.     iAll            = 0;
  40.     oTotal.value     = "";
  41.     oProgress.value    = 0;
  42.     
  43.     // Remove tree items
  44.     var aRows = oLogItems.childNodes;
  45.     for(var i = (aRows.length - 1); i >= 0 ; i--){
  46.         oLogItems.removeChild(aRows[i]);
  47.     }
  48. }
  49.  
  50. function bandwidthtest_runTest(iLevel){
  51.     bandwidthtest_reset();
  52.     
  53.     oButton.disabled = true;
  54.     oProgress.style.display = "block";
  55.     
  56.     // Get Test Files
  57.     var aTmpLevels = new Array();
  58.     var oPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("");
  59.     if(oPrefs.prefHasUserValue("bandwidthtest.files.1") && oPrefs.getCharPref("bandwidthtest.files.1").search(/[a-z0-9]/i) > -1)
  60.             aTmpLevels[aTmpLevels.length] = oPrefs.getCharPref("bandwidthtest.files.1");
  61.     if(oPrefs.prefHasUserValue("bandwidthtest.files.2") && oPrefs.getCharPref("bandwidthtest.files.2").search(/[a-z0-9]/i) > -1)
  62.             aTmpLevels[aTmpLevels.length] = oPrefs.getCharPref("bandwidthtest.files.2");
  63.     if(oPrefs.prefHasUserValue("bandwidthtest.files.3") && oPrefs.getCharPref("bandwidthtest.files.3").search(/[a-z0-9]/i) > -1)
  64.             aTmpLevels[aTmpLevels.length] = oPrefs.getCharPref("bandwidthtest.files.3");
  65.     if(oPrefs.prefHasUserValue("bandwidthtest.files.4") && oPrefs.getCharPref("bandwidthtest.files.4").search(/[a-z0-9]/i) > -1)
  66.             aTmpLevels[aTmpLevels.length] = oPrefs.getCharPref("bandwidthtest.files.4");
  67.     if(oPrefs.prefHasUserValue("bandwidthtest.files.5") && oPrefs.getCharPref("bandwidthtest.files.5").search(/[a-z0-9]/i) > -1)
  68.             aTmpLevels[aTmpLevels.length] = oPrefs.getCharPref("bandwidthtest.files.5");
  69.     
  70.     if(aTmpLevels.length > 0)
  71.         aLevels = aTmpLevels; 
  72.     
  73.     // Get Connection
  74.     if(oConnection.selectedItem.value != "-1"){    
  75.         iStop     = 3;
  76.         iLevel    = parseInt(oConnection.selectedItem.value);
  77.         
  78.         if(isNaN(iLevel) || typeof(aLevels[iLevel]) == 'undefined'){
  79.             iLevel    = 0;
  80.             iStop    = 5;
  81.         }
  82.     }
  83.     
  84.     setTimeout("bandwidthtest_fetchUrl("+ iLevel +")", 500);
  85. }
  86.  
  87. function bandwidthtest_endTest(){
  88.     
  89.     iServerTime                = 0;
  90.     trackServerTime            = false;
  91.     oButton.disabled         = false;
  92.     oProgress.style.display = "none";
  93.     
  94.     if(iSum == 0)
  95.         oTotal.value = "An error occurred";
  96.     else
  97.         oTotal.value = "~ "+ bandwidthtest_getBandwidthString(iSum / iCount);
  98.         
  99. }
  100.  
  101. function bandwidthtest_fetchUrl(iLevel){
  102.     iAll++;
  103.     iLevelCount++;
  104.         
  105.     var sUrl = aLevels[iLevel] +"?rand="+ Math.round(Math.random() * 200);
  106.     
  107.     try{
  108.         var oRequest    = new XMLHttpRequest();
  109.         var iStartTime    = (new Date()).getTime();
  110.         var iTime        = 0
  111.         var iSize        = 0;
  112.         var sResponse    = "";
  113.         
  114.         // Send Request
  115.         oRequest.open("GET", sUrl, false);
  116.         oRequest.send("");
  117.         
  118.         // Get Response
  119.         var iStopTime     = (new Date()).getTime();
  120.         sResponse         = oRequest.responseText;
  121.         
  122.         // Get Average
  123.         if(sResponse.length == 0){ // no divide by zero
  124.             bandwidthtest_logTime(sUrl, null, null, 101, "Didn't receive any data in response.");
  125.         }
  126.         else if(oRequest.status != 200){ // Response not 200
  127.             bandwidthtest_logTime(sUrl, null, null, oRequest.status, oRequest.statusText);
  128.         }
  129.         else{
  130.             iCount++;
  131.             
  132.             iTime = ((iStopTime - iStartTime) / 1000).toFixed(3); //seconds
  133.             iSize = ((sResponse.length / 1024).toFixed(7) * 8); //kilobits
  134.             
  135.             // prevent divide by zero error
  136.             if(iTime == 0)
  137.                 iTime = 0.1;
  138.                 
  139.             iSum += parseInt((iSize / iTime).toPrecision(15));
  140.             bandwidthtest_logTime(sUrl, iTime, iSize);
  141.         }
  142.         
  143.         // Level Increment or End
  144.         if(iAll > iStop){ // End
  145.             bandwidthtest_endTest();
  146.             return;
  147.         }
  148.         else if(iTime > 2 && iLevel > 0){ // Down a level
  149.             iLevelCount = 0;
  150.             iLevel--;
  151.         }
  152.         else if(((iLevelCount > 4 && iTime < 3) || iTime < 0.05 ) && iLevel < (aLevels.length - 1)){ // Go up one level
  153.             iLevelCount = 0;
  154.             iLevel++;
  155.         }
  156.         
  157.     }catch(err){ bandwidthtest_logTime(sUrl, null, null, 100, err) }
  158.         
  159.     // Set Progress
  160.     oProgress.value = (100 / iStop) * iAll;
  161.     
  162.     // Loop
  163.     setTimeout("bandwidthtest_fetchUrl("+ iLevel +")", 100);
  164. }
  165.  
  166. // Log Time in results tree
  167. function bandwidthtest_logTime(sUrl, iSeconds, iFileSize, iErrCode, sErrMsg){
  168.     var oLogItem     = document.createElement("treeitem");
  169.     var oLogRow        = oLogItem.appendChild(document.createElement("treerow"));
  170.     var oLogDesc    = oLogRow.appendChild(document.createElement("treecell"));
  171.         oLogDesc.setAttribute("label", sUrl);
  172.     var oLogSize    = oLogRow.appendChild(document.createElement("treecell"));
  173.     var oLogTime    = oLogRow.appendChild(document.createElement("treecell"));
  174.     
  175.     // Set Error/Warning attributes
  176.     if(iErrCode != null || sErrMsg != null){
  177.         oLogSize.setAttribute("label", "ERROR");
  178.         oLogTime.setAttribute("label", "ERROR");
  179.         
  180.         oLogItem.setAttribute("errcode", iErrCode);
  181.         oLogItem.setAttribute("errmsg", sErrMsg);
  182.     }
  183.     else{
  184.         oLogSize.setAttribute("label", (iFileSize / 8) +" KB");
  185.         oLogTime.setAttribute("label", iSeconds);
  186.     }
  187.     
  188.     // Append
  189.     oLogItems.appendChild(oLogItem);
  190.     
  191.     // Make visible
  192.     oLogs.treeBoxObject.ensureRowIsVisible(oLogItems.childNodes.length);
  193. }
  194.  
  195. // Translate Bandwith
  196. function bandwidthtest_getBandwidthString(iTimePer){
  197.     var sUnit         = "Kb";
  198.     
  199.     if(iTimePer > 1000){
  200.         iTimePer     = iTimePer / 1000;
  201.         sUnit        = "Mb";
  202.     }
  203.     else if(sTimePer < 0.0){
  204.         iTimePer     = iTimePer * 1000;
  205.         sUnit        = "bits";
  206.     }
  207.     
  208.     // Trim
  209.     var iDec         = -1;
  210.     var sTimePer    = iTimePer + "";
  211.     if((iDec = sTimePer.indexOf(".")) > -1 && (sTimePer.length - iDec) > 2){
  212.         sTimePer = sTimePer.substring(0, (iDec + 3));
  213.     }
  214.     
  215.     return sTimePer +" "+ sUnit +"ps";
  216. }
  217.  
  218. // Show Error
  219. function bandwidthtest_showError(oLogs){
  220.     if(oLogs){
  221.         
  222.         try{
  223.             var oSelected = oLogs.contentView.getItemAtIndex(oLogs.currentIndex);    
  224.             
  225.             if(oSelected == null)
  226.                 return;
  227.             
  228.             var iErrorCode    = oSelected.getAttribute("errcode");
  229.             var sErrorMsg    = oSelected.getAttribute("errmsg");
  230.         
  231.             //Title
  232.             if(!isNaN(iErrorCode))
  233.                 document.getElementById('error-title').setAttribute("value", iErrorCode);
  234.             
  235.             //Description
  236.             var oDesc = document.getElementById('error-desc');
  237.             while(oDesc.hasChildNodes()) 
  238.                 oDesc.removeChild(oDesc.firstChild);
  239.             
  240.             oDesc.appendChild(document.createTextNode(sErrorMsg)); 
  241.             
  242.         }catch(err){ }
  243.     }
  244. }
  245.  
  246. // Open Options
  247. function tinyurl_options(){
  248.     window.openDialog("chrome://bandwidthtest/content/options.xul", "bandwithTestOptions", "centerscreen, chrome, modal")    
  249. }